package com.question.java.array;

import com.question.java.array.CreateRangeRandom;

import java.util.Arrays;

/**
 *
 * 查询一个数组中连续元素组成的子数组中元素总和最大的那个子数组
 * @author Jun.Yang
 * @version 1.0
 */
public class MaxSumOfSubArray {

    /**
     * 求数组中连续元素和最大值
     * @param array 要计算的数组
     * @return 数组中连续元素和最大值
     */
    public static int maxSum(int[] array) {
        int sum = array[0];

        for(int i = 0, size = array.length; i < size; i++) {
            int tempSum = array[i];
            for(int j = i+1; j < size; j++) {
                tempSum += array[j];
                if(tempSum > sum) {
                    sum = tempSum;
                }
            }
        }

        return sum;
    }

    /**
     * 创建一个随机数组
     * @param min   数组
     * @param max
     * @param count
     * @return 创建的随机数组
     */
    public static int[] createRandomArray(int min, int max, int count) {
        int[] array = null;

        if(count > 0) {
            array = new int[count];
            for(int i = 0; i < count; i++) {
                //在指定大小范围内选择一个随机数填充数组
                array[i] = CreateRangeRandom.randInt(min, max);
            }
        }

        return array;

    }

    public static void main(String[] args) {
        int[] array = createRandomArray(-1000000, 1000000, 200);

        System.out.println("数组为:"+ Arrays.toString(array));

        System.out.println("最大值为:"+ maxSum(array));
    }
}
